package br.com.projetosivan.dao.impl;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.projetosivan.dao.TipoProdutoDao;
import br.com.projetosivan.model.TipoProduto;
import br.com.projetosivan.util.HibernateUtil;

public class TipoProdutoDaoImp implements TipoProdutoDao {

    public void save(TipoProduto item) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.save(item);
        t.commit();
        session.flush();
        session.close();
    }
    public TipoProduto getTipoProduto(long id) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        TipoProduto tipoProduto = (TipoProduto) session.load(TipoProduto.class, id);
        return tipoProduto;
    }
    public List<TipoProduto> list() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from TipoProduto order by nome").list();
        t.commit();
        session.flush();
        session.close();
        return lista;
    }
    
    public List<TipoProduto> listTipoProdutoPaiNull() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from TipoProduto where tipoProdutoPai.id is null order by nome").list();
        t.commit();
        session.flush();
        session.close();
        return lista;
    }
    
    public List<TipoProduto> getTipoProdutoByIdPai(Long id) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from TipoProduto where tipoProdutoPai is not null and tipoProdutoPai.id = :id order by nome").setParameter("id", id).list();
        t.commit();
        session.flush();
        session.close();
        return lista;
    }
    
    public void remove(TipoProduto item) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.delete(item);
        t.commit();
        session.flush();
        session.close();
    }
    public void update(TipoProduto item) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.update(item);
        t.commit();
        session.flush();
        session.close();
    }
}